package someTestExcemple.collectionAndMap.collection.queue;

import java.util.Random;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;

public class BlockingQueueTest {
    /**
     * BlockingQueue 是线程安全的阻塞队列，
     * 广泛应用于生产者-消费者模型。生产者通过 put()
     * 方法将元素放入队列，如果队列满了，生产者线程会被阻塞；
     * 消费者通过 take() 方法从队列中取元素，如果队列为空，消费者线程会被阻塞。
     * @param args
     */
    public static void main(String[] args) {
        BlockingQueue<String> queue = new LinkedBlockingQueue<>(10);

        Random random = new Random(99999);
        int count =100;
// 生产者
        while (count >0) {
            count--;
            new Thread(() -> {
                try {
                    System.out.println(Thread.currentThread().getName() + " 生产了");
                    queue.put("Data" + random.nextInt());
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }).start();
            new Thread(() -> {
                try {
                    String data = queue.take();
                    System.out.println(Thread.currentThread().getName() + " 消费了 " + data);
                    Thread.sleep(30000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }).start();
        }

// 消费者

    }
}
